/*
 * Phase.h
 *
 *  Created on: 21 Jul 2011
 *      Author: al2010
 */

#ifndef PHASE_H_
#define PHASE_H_

// C++ includes
#include <memory>

// GeoReact includes
#include "Utils.h"

class Phase
{
public:
	Phase();
	
	virtual ~Phase();
	
	/// --- Setter methods --- ///
	void
	SetSpecies(const StringVector& species);
	
	/// --- Getter methods --- ///
	const StringVector&
	GetSpecies() const;
	
	/// --- Virtual methods --- ///
	virtual	const String
	GetName() const = 0;
	
	virtual const DoubleVector
	ActivityCoefficients(double T, double P, const DoubleVector& n) const = 0;
	
	virtual const DoubleVector
	Activities(double T, double P, const DoubleVector& n) const = 0;
	
private:
	/// The names of the species in the phase
	StringVector species;
};

/// --- Auxiliary type definitions --- //
typedef std::shared_ptr<const Phase> PhasePtr;

#endif /* GENERICPHASE_H_ */
